/**
 * 高精度乘法
**/
#include <bits/stdc++.h>
using namespace std;

// 乘法
vector<int> mul(const vector<int> &lhs, const vector<int> &rhs) {
    vector<int> ans;
    for(int i = 0; i < lhs.size(); i++) {
        for(int j = 0; j < rhs.size(); j++) {
            if((i + j)  >=  ans.size())
                ans.push_back(lhs[i] * rhs[j]);
            else
                ans[i + j]  += lhs[i] * rhs[j];
        }
    }

    // 处理进位
    int carry = 0;
    for(int i = 0; i  < ans.size(); i++) {
        int t  = carry + ans[i];
        carry = t / 10;
        ans[i] = t % 10; 
    }
    while(carry > 0) {
        ans.push_back(carry % 10);
        carry /= 10;
    }
    return ans;
}

string vtoString(const vector<int> &v) {
    bool nonZero = false;
    string ans;
    for(int i = v.size() - 1; i >= 0; i--) {
        if(v[i] != 0) nonZero = true;
        if(nonZero) {
            ans.append(1, '0' + v[i]);
        }
    }
    return ans;
}

// 逆序存储进入长度为500的string中。
vector<int> itoVector(int i) {
    vector<int> s;
    while(i) {
        int t =  i % 10;
        s.push_back(t);
        i /=10;
    }
    return s;
}

int main(){
    vector<int> ans = itoVector(1);
 
    int a; cin >> a;
    for(int i = 2; i <= a; i++) {
        ans = mul(ans, itoVector(i));
    }

    // for(int i = 0; i < ans.size(); i++) {
    //     cout << ans[i];
    // }
    // cout << endl;


    cout <<  vtoString(ans) << endl;
    return 0;
}